﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace QL_Nha_Sach_Phuong_Nam
{
    public partial class FormPhieuDeNghiXuatKho : Form
    {
        string action;

        List<ChiTietPhieuDeNghiXuatKho> dsChitietchon;

        //Khai bao cac CXuly
        CXulyPhieuDeNghiXuatKho XulyPhieudenghi;
        CXulythongtinsach XulySach;

        public FormPhieuDeNghiXuatKho()
        {
            InitializeComponent();
        }

        private void FormPhieuDeNghiXuatKho_Load(object sender, EventArgs e)
        {
            dsChitietchon = new List<ChiTietPhieuDeNghiXuatKho>();
            XulyPhieudenghi = new CXulyPhieuDeNghiXuatKho();
            XulySach = new CXulythongtinsach();

            //Load dữ liệu lên form
            hienthidsPhieuDeNghi(XulyPhieudenghi.getDsPhieuDeNghiXuatKho());
        }

        private void btnthemphieudenghi_Click(object sender, EventArgs e)
        {
            #region Xử lý giao diện
            btnthemphieudenghi.Enabled = false;
            btnsuaphieudenghi.Enabled = false;
            btnxoaphieudenghi.Enabled = false;
            btnsave.Enabled = true;
            btnhuy.Enabled = true;
            #endregion

            #region Xử lý dữ liệu
            action = "add";

            //Mở form chọn sách từ kho
            FormchonsachchoPhieuDeNghi f = new FormchonsachchoPhieuDeNghi();
            f.ShowDialog();

            dsChitietchon = f.Dschitiet;
            if (dsChitietchon.Count > 0) 
            {
                foreach (ChiTietPhieuDeNghiXuatKho s in dsChitietchon)
                {
                    int i = dgvchitietPhieudenghi.Rows.Add();
                    dgvchitietPhieudenghi.Rows[i].Cells[0].Value = s.Sach.SachNo;
                    dgvchitietPhieudenghi.Rows[i].Cells[1].Value = s.Sach.SachName;
                    dgvchitietPhieudenghi.Rows[i].Cells[2].Value = s.Quantum;
                }
            }

            #endregion
        }

        private void btnsuaphieudenghi_Click(object sender, EventArgs e)
        {
            #region Xử lý giao diện
            btnthemphieudenghi.Enabled = false;
            btnsuaphieudenghi.Enabled = false;
            btnxoaphieudenghi.Enabled = false;
            btnsave.Enabled = true;
            btnhuy.Enabled = true;
            #endregion

            #region Xử lý dữ liệu
            action = "edit";
            #endregion
        }

        private void btnxoaphieudenghi_Click(object sender, EventArgs e)
        {
            #region Xử lý giao diện
            btnthemphieudenghi.Enabled = false;
            btnsuaphieudenghi.Enabled = false;
            btnxoaphieudenghi.Enabled = false;
            btnsave.Enabled = true;
            btnhuy.Enabled = true;
            #endregion

            #region Xử lý dữ liệu
            action = "delete";
            #endregion
        }

        private void btnsave_Click(object sender, EventArgs e)
        {
            #region Xử lý giao diện
            btnthemphieudenghi.Enabled = true;
            btnsuaphieudenghi.Enabled = true;
            btnxoaphieudenghi.Enabled = true;
            btnsave.Enabled = false;
            btnhuy.Enabled = false;
            #endregion

            #region Xử lý dữ liệu
            switch (action)
            {
                case "add":
                    {
                        PhieuDeNghiXuatKho p = new PhieuDeNghiXuatKho();
                        p.PhieuDeNghiXuatKhoID = XulyPhieudenghi.getDsPhieuDeNghiXuatKho().Count + 1;
                        p.PhieuDeNghiXuatKhoNo = txtmaphieudenghi.Text;
                        p.PhieuDeNghiXuatKhoDate = System.DateTime.Now.Date;
                        if (delivery.Checked == true)
                            p.PhieuDeNghiXuatKhoType = "xuat";
                        else
                            p.PhieuDeNghiXuatKhoType = "chuyen";
                        p.PhieuDeNghiXuatKhoHandle = "no";
                        p.PhieuDeNghiXuatKhoComplete = "no";
                        p.PhieuDeNghiXuatKhoStatus = "live";
                        p.PhieuDeNghiXuatKhoreason = txtlydophieudenghi.Text;
                        foreach (DataGridViewRow r in dgvchitietPhieudenghi.Rows)
                        {
                            if (r.IsNewRow)
                                continue;
                            ChiTietPhieuDeNghiXuatKho ctpd = new ChiTietPhieuDeNghiXuatKho();
                            ctpd.FK_SachID = XulySach.TimSachtheoma(r.Cells[0].Value.ToString()).SachID;
                            ctpd.Quantum = int.Parse(r.Cells[2].Value.ToString());
                            p.ChiTietPhieuDeNghiXuatKhos.Add(ctpd);
                        }

                        XulyPhieudenghi.ThemPhieuDeNghiXuatKho(p);
                        break;
                    }
                case "edit":
                    {
                        PhieuDeNghiXuatKho p = new PhieuDeNghiXuatKho();
                        p.PhieuDeNghiXuatKhoID = XulyPhieudenghi.TimPhieuDeNghiXuatKho(txtmaphieudenghi.Text).PhieuDeNghiXuatKhoID;
                        p.PhieuDeNghiXuatKhoNo = txtmaphieudenghi.Text;
                        p.PhieuDeNghiXuatKhoreason = txtlydophieudenghi.Text;
                        if (delivery.Checked == true)
                            p.PhieuDeNghiXuatKhoType = "xuat";
                        else
                            p.PhieuDeNghiXuatKhoType = "chuyen";
                        foreach (DataGridViewRow r in dgvchitietPhieudenghi.Rows)
                        {
                            if (r.IsNewRow)
                                continue;
                            ChiTietPhieuDeNghiXuatKho ctpd = new ChiTietPhieuDeNghiXuatKho();
                            ctpd.FK_SachID = XulySach.TimSachtheoma(r.Cells[0].Value.ToString()).SachID;
                            ctpd.Quantum = int.Parse(r.Cells[2].Value.ToString());
                            p.ChiTietPhieuDeNghiXuatKhos.Add(ctpd);
                        }

                        XulyPhieudenghi.SuaPhieuDeNghiXuatKho(p);
                        break;
                    }
                case "delete":
                    {
                        XulyPhieudenghi.XoaPhieuDeNghiXuatKho(txtmaphieudenghi.Text);
                        txtmaphieudenghi.Text = "";
                        txtlydophieudenghi.Text = "";
                        txtngaylapphieudenghi.Text = "";
                        txttinhtrangphieudenghi.Text = "";
                        dgvchitietPhieudenghi.Rows.Clear();
                        break;
                    }
                default:
                    break;
            }
            #endregion
        }

        private void btnhuy_Click(object sender, EventArgs e)
        {
            #region Xử lý giao diện
            btnthemphieudenghi.Enabled = true;
            btnsuaphieudenghi.Enabled = true;
            btnxoaphieudenghi.Enabled = true;
            btnsave.Enabled = false;
            btnhuy.Enabled = false;

            // Xử lý khi ấn nút hủy tùy vào hành động đang thực hiện
            switch (action)
            {
                case "add":
                    {
                        break;
                    }
                case "edit":
                    {
                        break;
                    }
                case "delete":
                    {
                        break;
                    }
                default:
                    break;
            }
            #endregion
        }

        private void lstphieudenghixuat_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (ListViewItem lvi in lstphieudenghixuat.SelectedItems)
            {
                PhieuDeNghiXuatKho p = XulyPhieudenghi.TimPhieuDeNghiXuatKho(lvi.SubItems[0].Text);
                if (p != null)
                {
                    hienthiPhieuDeNghi(p);
                    tabControlPhieuDeNghiXuat.SelectedIndex = 1;
                }
            }
        }

        private void btntim_Click(object sender, EventArgs e)
        {
            if(txttimtheoma.Text!="")
            {
                var kq = XulyPhieudenghi.getDsPhieuDeNghiXuatKho().Where(x=>x.PhieuDeNghiXuatKhoNo==txttimtheoma.Text && x.PhieuDeNghiXuatKhoStatus=="live");
                if (kq!=null)
                {
                    hienthidsPhieuDeNghi(kq.ToList<PhieuDeNghiXuatKho>());
                }
            }
            else
            {
                var kq = XulyPhieudenghi.getDsPhieuDeNghiXuatKho().Where(x =>x.PhieuDeNghiXuatKhoStatus == "live");
                if (kq != null)
                {
                    hienthidsPhieuDeNghi(kq.ToList<PhieuDeNghiXuatKho>());
                }
            }
        }

        private void hienthidsPhieuDeNghi(List<PhieuDeNghiXuatKho> ds)
        {
            lstphieudenghixuat.Items.Clear();

            foreach(PhieuDeNghiXuatKho p in ds)
            {
                ListViewItem lvi = lstphieudenghixuat.Items.Add(p.PhieuDeNghiXuatKhoNo);
                lvi.SubItems.Add(p.PhieuDeNghiXuatKhoreason);
                lvi.SubItems.Add(p.PhieuDeNghiXuatKhoDate.ToString());
                lvi.SubItems.Add(p.PhieuDeNghiXuatKhoHandle);
                lvi.SubItems.Add(p.PhieuDeNghiXuatKhoComplete);
            }
        }

        private void hienthiPhieuDeNghi(PhieuDeNghiXuatKho p)
        {
            if (p.PhieuDeNghiXuatKhoHandle == "yes")
            {
                btnsuaphieudenghi.Enabled = false;
                btnxoaphieudenghi.Enabled = false;
            }
            else
            {
                btnsuaphieudenghi.Enabled = true;
                btnxoaphieudenghi.Enabled = true;
            }

            if (p.PhieuDeNghiXuatKhoType == "xuat")
                delivery.Checked = true;
            else
                transfer.Checked = true;

            txtmaphieudenghi.Text = p.PhieuDeNghiXuatKhoNo;
            txtngaylapphieudenghi.Text = p.PhieuDeNghiXuatKhoDate.ToString();
            txttinhtrangphieudenghi.Text = p.PhieuDeNghiXuatKhoHandle;
            txtlydophieudenghi.Text = p.PhieuDeNghiXuatKhoreason;
            hienthichitietPhieuDeNghi(p.ChiTietPhieuDeNghiXuatKhos.ToList<ChiTietPhieuDeNghiXuatKho>());   
        }

        private void hienthichitietPhieuDeNghi(List<ChiTietPhieuDeNghiXuatKho> ds)
        {
            dgvchitietPhieudenghi.Rows.Clear();

            foreach(ChiTietPhieuDeNghiXuatKho ct in ds)
            {
                int i = dgvchitietPhieudenghi.Rows.Add();
                dgvchitietPhieudenghi.Rows[i].Cells[0].Value = ct.Sach.SachNo;
                dgvchitietPhieudenghi.Rows[i].Cells[1].Value = ct.Sach.SachName;
                dgvchitietPhieudenghi.Rows[i].Cells[2].Value = ct.Quantum;
            }
        }

        private void cbgap_CheckedChanged(object sender, EventArgs e)
        {
            if (cbgap.Checked == true)
            {
                if (txtlydophieudenghi.Text.Contains("(gap)")==false)
                {
                    txtlydophieudenghi.Text+="(gap)";
                }
            }
            else
            {
                if (txtlydophieudenghi.Text.Contains("(gap)"))
                {
                    txtlydophieudenghi.Text = txtlydophieudenghi.Text.Substring(0, txtlydophieudenghi.Text.Length - 5);
                }
            }
        }

    }
}
